/*
 * @Author: yuki
 * @Date: 2025-10-25 16:45:21
 * @LastEditTime: 2025-11-06 19:45:57
 * @Description: 注册dto校验
 */
import { PASSWORD_REG } from '@horoscope/shared';
import {
  IsEmail,
  IsNotEmpty,
  IsString,
  Length,
  Matches,
  ValidateIf
} from 'class-validator';

export class RegisterDto {
  @ValidateIf(o => !!o.email)
  @IsString({ message: '邮箱必须是字符串' })
  @IsEmail(
    {
      allow_ip_domain: false,
      allow_underscores: true
    },
    { message: '邮箱格式错误' }
  )
  email?: string;
  @ValidateIf(o => !!o.username)
  @IsString({ message: '用户名必须是字符串' })
  @Length(4, 16, { message: '用户名长度必须是4到16个字符' })
  username?: string;
  @Matches(PASSWORD_REG, {
    message:
      '密码必须包含数字和英文字母，可包含!@#$%^&*等特殊字符（长度8-20位）'
  })
  @IsString({ message: '密码必须是字符串' })
  @IsNotEmpty({ message: '密码不能为空' })
  password: string;
  @Matches(PASSWORD_REG, {
    message:
      '密码必须包含数字和英文字母，可包含!@#$%^&*等特殊字符（长度8-20位）'
  })
  @IsString({ message: '确认密码必须是字符串' })
  @IsNotEmpty({ message: '确认密码不能为空' })
  confirmPassword: string;
}

export class LoginDto {
  @IsNotEmpty({ message: '必须提供用户名或邮箱' })
  @IsString({ message: '用户名必须是字符串' })
  username: string;
  @Matches(PASSWORD_REG, {
    message:
      '密码必须包含数字和英文字母，可包含!@#$%^&*等特殊字符（长度8-20位）'
  })
  @IsString({ message: '密码必须是字符串' })
  @IsNotEmpty({ message: '密码不能为空' })
  password: string;
}
